package thread_safe;

/**
 * @Description: 懒汉式模式中的线程安全，使用双重检查的方式实现线程安全
 * @Author: WangBlue
 * @Create: 2024-09-23 14:57
 * @Version: 1.0
 **/

public class DoubleSafe {
    // 私有化构造器
    private DoubleSafe() { }

    // 私有化变量
    //使用volatile修饰，禁止重排序
    private static volatile DoubleSafe instance = null;

    // 使用双重检查的方式实现线程安全
    public static DoubleSafe getInstance() {
        // 第一次判断，如果instance不为null，不进入抢锁阶段，直接返回实际
        if (instance == null) {
            synchronized (DoubleSafe.class) {
                // 抢到锁之后再次判断是否为空
                if (instance == null) {
                    instance = new DoubleSafe();
                }
            }
        }
        return instance;
    }
}

